<?php

/**
 * Controlardor de gestión de usuarios
 *
 */
class controlador_usuarios {

    /**
     * Método por defecto de entrada en la web
     */
    public function inicio() {
        require 'app/views/inicio.php';
    }

    /**
     * Método por defecto de entrada en la web
     */
    public function perfil() {
        $obj_usuario = new Usuario();
        $obj_usuario->get_by_usuario($_SESSION['betporra_nombre']);

        require 'app/views/perfil.php';
    }

    /**
     * Método por defecto de entrada en la web
     */
    public function mis_regalos() {
        $obj_premios = new Premio();
        $params = $obj_premios->obtener_premios_by_user($_SESSION['betporra_id']);
        require 'app/views/mis_regalos.php';
    }

    /**
     * Formulario de registro y regitrar al usuario en bd
     */
    public function registrar() {
        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
            $obj_usuario = new Usuario();

//Limpiamos los campos y los guardamos en variables
            $Email = test_input($_POST['email']);
            $Nombre_usuario = test_input($_POST['usuario']);
            $Clave = test_input($_POST['password']);
            $Nombre = test_input($_POST['nombre']);
            $fecha_nac = test_input($_POST['fecha_nac']);
            //Creo un codigo de activaci�n
            $Codigo_activacion = md5(time() . rand(1, 100));


            //Comprobamos que se han introducido todos los datos obligatorios
            if ($obj_usuario->existe_usuario_email($Email)) {
                header('location:registrar/error:2');
                die();
            } else if ($obj_usuario->existe_nombre_usuario($Nombre_usuario)) {
                header('location:registrar/error:3');
                die();
            } else {
                $array_datos = array(
                    "email" => $Email,
                    "usuario" => $Nombre_usuario,
                    "password" => $Clave,
                    "nombre" => $Nombre,
                    "fecha_nac" => $fecha_nac,
                    "codigo_activacion" => $Codigo_activacion
                );

                $obj_usuario->set($array_datos);
                send_mail_registro($Email, $Codigo_activacion);
                $_SESSION['betporra_msj'] = SESION_REGISTROOK1."<b>$Email</b>". SESION_REGISTROOK2. "<a href='#' data-toggle='modal' data-target='#modalLogin'>".SESION_REGISTROOK3."</a>";
                header('location:inicio');
            }
        } else {
            require 'app/views/registrar.php';
        }
    }

    /**
     * Activa la cuenta
     */
    public function activar() {
        $cod = $_GET['id'];
        $obj_usuario = new Usuario();
        $obj_usuario->activar_usuario($cod);
        $_SESSION['betporra_msj'] = SESION_ACTIVADA1.'<a href="#" class="" data-toggle="modal" data-target="#modalLogin">'.SESION_ACTIVADA2.'</a> betporra.com!';
        header('location:../inicio');
    }

    /**
     * Formulario para editar usuario
     */
    public function editar() {
        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
            $obj_usuario = new Usuario();

//Limpiamos los campos y los guardamos en variables
            $Nombre = test_input($_POST['nombre']);
//$Imagen = $_POST['imagen'];
            $Fecha_nacimiento = date('Y-m-d', strtotime($_POST['fecha_nacimiento']));
            $Direccion = test_input($_POST['direccion']);
            $Poblacion = test_input($_POST['poblacion']);
            $Provincia = test_input($_POST['provincia']);
            $Cp = test_input($_POST['cp']);
            $Facebook = test_input($_POST['facebook']);
            $Twitter = test_input($_POST['twitter']);
            $Googleplus = test_input($_POST['googleplus']);
            $id = $_SESSION['betporra_id'];


            $array_datos = array(
                "id" => $id,
                "nombre" => $Nombre,
                "fecha_nacimiento" => $Fecha_nacimiento,
                "direccion" => $Direccion,
                "poblacion" => $Poblacion,
                "provincia" => $Provincia,
                "cp" => $Cp,
                "facebook" => $Facebook,
                "twitter" => $Twitter,
                "googleplus" => $Googleplus
            );

            $obj_usuario->edit($array_datos);
            $_SESSION['betporra_msj'] = SESION_EDITAROK;
            header('location:perfil');
        } else {
            $_SESSION['betporra_msj'] = SESION_EDITARERROR;
            header('location:perfil/error:1');
        }
    }

    /**
     * Función que comprueba si existe un usuario con el email que recibo por post desde ajax
     * @return devuelve con echo si existe o no el un usuario
     */
    public function comprobacion_email_existente() {
        $valid = true;
        if (!empty($_POST['email'])) {
            $obj_usuario = new Usuario();

            if ($obj_usuario->existe_usuario_email($_POST['email'])) {
                $valid = false;
            } else {
                $valid = true;
            }
        }
        echo json_encode(array(
            'valid' => $valid,
        ));
    }

    /**
     * Función que comprueba si existe un usuario con el nombre de usuario que recibo por post desde ajax
     * @return devuelve con echo si existe o no el un usuario
     */
    public function comprobacion_nombre_usuario_existente() {
        $valid = true;
        if (!empty($_POST['usuario'])) {
            $obj_usuario = new Usuario();
            if ($obj_usuario->existe_nombre_usuario($_POST['usuario'])) {
                $valid = false;
            } else {
                $valid = true;
            }
        }
        echo json_encode(array(
            'valid' => $valid,
        ));
    }

    /**
     * Formulario de login
     */
    public function login() {
        $obj_usuario = new Usuario();
        if ($obj_usuario->comprobar_login($_POST['email'], $_POST['password'])) {
            //Creamos la variable de sesión del usuario
            $email_usuario = $_POST['email'];
            $obj_usuario->get($email_usuario);
            $_SESSION['betporra_usuario'] = $obj_usuario->get_email();
            $_SESSION['betporra_id'] = $obj_usuario->get_id();
            $_SESSION['betporra_nombre'] = $obj_usuario->usuario;
            $_SESSION['betporra_avatar'] = $obj_usuario->imagen;
            //Actualizamos la fecha de último acceso del usuario
            $obj_usuario->actualizar_fecha_ultimo_acceso($_SESSION['betporra_id']);
            //Creamos la cookie si se quiere recordar
            if (isset($_POST['RecordarClave'])) {
                setcookie("betporra_usuario", md5($_SESSION['betporra_usuario']), time() + 24 * 60 * 60 * 7);
            }
            header('location:competiciones');
        } else {
            $_SESSION['betporra_msj'] = SESION_LOGINERROR1.'<a href="#" class="" data-toggle="modal" data-target="#modalLogin">'.SESION_LOGINERROR2.'</a> o <a href="registro">'.SESION_LOGINERROR3.'</a> a betporra.com';
            header('location:inicio/error:1');
            die();
        }
    }

    /**
     * Cambiar clave del usuario
     */
    public function cambiar_clave() {
        $password_old = $_POST['password_old'];
        $password = $_POST['password'];
        $confirm_password = $_POST['confirm_password'];

        $obj_usuario = new Usuario();

//comprueba si es correcta la clave antigua
        if ($obj_usuario->comprobar_clave($_SESSION['betporra_id'], $password_old)) {
            if ($password == $confirm_password) {
//si la contraseña coincide, la cambia en la BD
                $obj_usuario->cambiar_clave($_SESSION['betporra_id'], $password);
                $_SESSION['betporra_msj'] = SESION_CLAVEOK;
                header('location:perfil');
            } else {
//si la contraseña no es igual
                $_SESSION['betporra_msj'] = SESION_CLAVENOCOINCIDE;
                header('location:perfil');
            }
        } else {//Si la contraseña antigua no es correcta
            $_SESSION['betporra_msj'] = SESION_CLAVENOCORRECTA;
            header('location:perfil');
        }
    }

    public function modificar_imagen() {

        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
            $obj_usuario = new Usuario();
            
            $error = false;
            
            // MIME types permitidos
            $mime = array('image/jpg', 'image/jpeg', 'image/gif', 'image/png');
            // Buscamos si el archivo que subimos tiene el MIME type que permitimos en nuestra subida
            if (!in_array($_FILES['archivo']['type'], $mime)) {
                $error = true;
            }
            // Le decimos al usuario que se olvido de subir un archivo
            if ($_FILES['archivo']['type'] == '') {
                $error = true;
            }
            // Indicamos hasta que peso de archivo puede subir el usuario.
            if ($_FILES['archivo']['size'] > '2097152') {
                $error = true;
            }
            
            //Limpiamos los campos y los guardamos en variables
            $archivo = $_FILES["archivo"]["name"];

            //Comprobamos que se han introducido todos los datos obligatorios
            if (!(empty($archivo)) && (!$error)) {
                $i = 1;
                while (file_exists("web/images/users/$archivo")) {
                    $archivo = "($i)" . $_FILES["archivo"]["name"];
                    $i++;
                }


                $imagen = $archivo;
                $id = $_SESSION['betporra_id'];


                $obj_usuario->modificar_imagen($id, $imagen);

                move_uploaded_file($_FILES["archivo"]["tmp_name"], "web/images/users/$archivo");
                $_SESSION['betporra_msj'] = SESION_AVATAROK;
                header("location:perfil");
            } else {
                $_SESSION['betporra_msj'] = SESION_AVATARERROR;
                header("location:perfil");
            }
        } else {
            header("location:perfil");
        }
    }

    /**
     * Formulario de logout
     */
    public function logout() {
        session_destroy(); //Borra todas las variables de sesión
        setcookie("sesionusuario", "", time() + 24 * 60 * 60 * 7); //Borra la cookie de usuario
        $_SESSION['betporra_msj'] = SESION_LOGOUT;
        header('location:inicio');
    }

    public function recuperar_clave() {
        $obj_usuario = new Usuario();

        if (isset($_POST['email'])) {//si recibe email por post
            if ($obj_usuario->existe_usuario_email($_POST['email'])) {//si existe el usuario en la bbdd
                //Generamos la nueva clave
                $new_pass = substr(md5(time()), 0, 8);
                
                //Codificamos la nueva clave
                $new_pass_cod = md5($new_pass);
                
                //Restauramos la nueva clave en la base de datos
                $obj_usuario->restaurar_clave($_POST['email'], $new_pass_cod);

                //enviamos email con la contraseña
                send_mail_clave($_POST['email'], $new_pass);

                $_SESSION['betporra_msj'] = SESION_RESTAURARCLAVE;
                header('location:inicio');
            } else {
                $_SESSION['betporra_msj'] = SESION_RESTAURARCLAVE;
                header('location:inicio');
            }
        } else {
            header('location:inicio');
        }
    }

}

?>